package com.naiterui.ehp.bs.doctor.prodocl;

import java.io.Serializable;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 药方消息实体对应一JSON结构
 * 用于抽象医生向患者的推荐用药
 * <P>File name : Prescription.java </P>
 * <P>Author : zhouyanxin </P> 
 * <P>Date : 2015年6月18日 </P>
 */
public class RecommandDrugItem implements IChecker, Serializable {

	/**
	 * 字段或域定义：<code>serialVersionUID</code>
	 */
	private static final long serialVersionUID = -7248904807441924378L;
	
	/**
	 * LOGGER
	 */
	private static final Logger LOGGER = LoggerFactory.getLogger(RecommandDrugItem.class);

	/**
	 * 规格
	 */
	private String spec;
	
	/**
	 * 组合套餐
	 */
	private String combin;
	
	/**
	 * 商编 药品编号
	 */
	private Long productId;
	
	/**
	 * SKU ID
	 */
	private Long skuId;
	
	/**
	 * 商品名称
	 */
	private String productName;
	
	/**
	 * 购买数量
	 */
	private Integer quantity;
	
	/**
	 * 用法用量
	 */
	private String usage;
	
	/**
	 * 备注
	 */
	private String bakup;
	
	
	
	
	
	
	/**
	 * 服用的时间点
	 * 饭前、饭后
	 */
	//private String timePoint;
	
	/**
	 * 一日服用多少次
	 */
	//private Integer times;
	
	/**
	 * 每次服用多少
	 */
	//private Integer everyTime;
	
	/**
	 * 每次服用的单位
	 * 片、毫升、克、粒、颗、包
	 */
	//private String unit;
	
	/**
	 * 检测消息属性的完整性和正确性
	 * RecommandDrugItem.selfValidate()<BR>
	 * <P>Author : zhouyanxin </P>  
	 * <P>Date : 2015年6月22日 </P>
	 * @return
	 */
	@Override
  public boolean selfValidate() {
		if(productId == null || productId <= 0) {
			LOGGER.error("recommandDrug message item attribute [productId] is invalid, [productId] is {}!", productId);
			return false;
		}
		if(skuId == null || skuId <= 0) {
			LOGGER.error("recommandDrug message item attribute [skuId] is invalid, [skuId] is {}!", skuId);
			return false;
		}
		if(StringUtils.isEmpty(productName)) {
			LOGGER.error("recommandDrug message item attribute [productName] is invalid, [productName] is {}!", productName);
			return false;
		}
		if(quantity == null || quantity <= 0) {
			LOGGER.error("recommandDrug message item attribute [quantiry] is invalid, [quantity] is {}!", quantity);
			return false;
		}
		if(StringUtils.isEmpty(spec)) {
			LOGGER.error("recommandDrug message item attribute [spec] is invalid, [spec] is {}!", spec);
			return false;
		}
		if(StringUtils.isEmpty(combin)) {
			LOGGER.error("recommandDrug message item attribute [combian] is invalid, [combian] is {}!", combin);
			return false;
		}
		
		/*
		if(times == null || times <= 0) {
			LOGGER.error("recommandDrug message item attribute [times] is invalid, [times] is {}!", times);
			return false;
		}
		if(StringUtils.isEmpty(timePoint)) {
			LOGGER.error("recommandDrug message item attribute [timePoint] is invalid, [timePoint] is {}!", timePoint);
			return false;
		}
		if(everyTime == null || everyTime <= 0) {
			LOGGER.error("recommandDrug message item attribute [everyTime] is invalid, [everyTime] is {}!", everyTime);
			return false;
		}
		if(StringUtils.isEmpty(unit)) {
			LOGGER.error("recommandDrug message item attribute [unit] is invalid, [unit] is {}!", unit);
			return false;
		}*/
		return true;
	}

	/**
	 * @return Long 取得域 productId 的方法。
	 */
	public Long getProductId() {
		return productId;
	}

	/**
	 * @param productId 对域 productId 的设置方法.
	 */
	public void setProductId(Long productId) {
		this.productId = productId;
	}

	/**
	 * @return String 取得域 productName 的方法。
	 */
	public String getProductName() {
		return productName;
	}

	/**
	 * @param productName 对域 productName 的设置方法.
	 */
	public void setProductName(String productName) {
		this.productName = productName;
	}

	/**
	 * @return Integer 取得域 quantity 的方法。
	 */
	public Integer getQuantity() {
		return quantity;
	}

	/**
	 * @param quantity 对域 quantity 的设置方法.
	 */
	public void setQuantity(Integer quantity) {
		this.quantity = quantity;
	}

//	/**
//	 * @return Integer 取得域 times 的方法。
//	 */
//	public Integer getTimes() {
//		return times;
//	}
//
//	/**
//	 * @param times 对域 times 的设置方法.
//	 */
//	public void setTimes(Integer times) {
//		this.times = times;
//	}
//
//	/**
//	 * @return String 取得域 timePoint 的方法。
//	 */
//	public String getTimePoint() {
//		return timePoint;
//	}
//
//	/**
//	 * @param timePoint 对域 timePoint 的设置方法.
//	 */
//	public void setTimePoint(String timePoint) {
//		this.timePoint = timePoint;
//	}
//
//	/**
//	 * @return Integer 取得域 everyTime 的方法。
//	 */
//	public Integer getEveryTime() {
//		return everyTime;
//	}
//
//	/**
//	 * @param everyTime 对域 everyTime 的设置方法.
//	 */
//	public void setEveryTime(Integer everyTime) {
//		this.everyTime = everyTime;
//	}
//
//	/**
//	 * @return String 取得域 unit 的方法。
//	 */
//	public String getUnit() {
//		return unit;
//	}
//
//	/**
//	 * @param unit 对域 unit 的设置方法.
//	 */
//	public void setUnit(String unit) {
//		this.unit = unit;
//	}

	/**
	 * @return String 取得域 bakup 的方法。
	 */
	public String getBakup() {
		return bakup;
	}

	/**
	 * @param bakup 对域 bakup 的设置方法.
	 */
	public void setBakup(String bakup) {
		this.bakup = bakup;
	}

	/**
	 * @return Long 取得域 skuId 的方法。
	 */
	public Long getSkuId() {
		return skuId;
	}

	/**
	 * @param skuId 对域 skuId 的设置方法.
	 */
	public void setSkuId(Long skuId) {
		this.skuId = skuId;
	}

	/**
	 * @return String 取得域 spec 的方法。
	 */
	public String getSpec() {
		return spec;
	}

	/**
	 * @param spec 对域 spec 的设置方法.
	 */
	public void setSpec(String spec) {
		this.spec = spec;
	}

	/**
	 * @return String 取得域 combin 的方法。
	 */
	public String getCombin() {
		return combin;
	}

	/**
	 * @param combin 对域 combin 的设置方法.
	 */
	public void setCombin(String combin) {
		this.combin = combin;
	}

	/**
	 * @return String 取得域 usage 的方法。
	 */
	public String getUsage() {
		return usage;
	}

	/**
	 * @param usage 对域 usage 的设置方法.
	 */
	public void setUsage(String usage) {
		this.usage = usage;
	}
}
